"""
装饰器
"""


def inner(func):
    print("validate")
    func()


def f1():
    print("f1")


def f2():
    print("f2")


inner(f1)


def w1(func):
    def w2():
        print("validate")
        func()

    return w2


@w1
def f1():
    print("f1")


f1()


def decorator(func):
    print("decorator-begin")

    def wrapper():
        print("validate")
        return func()

    print("decorator-end")
    return wrapper


@decorator
def f1():  # 可以断点加载这一行，查看函数地址，在装饰前后，f1()函数地址不同。
    print("f1")


f1()


def decorator(func):
    print("decorator-begin")

    def wrapper(content):
        print("validate")
        return func(content)

    print("decorator-end")
    return wrapper


@decorator
def f1(content):  # 可以断点加载这一行，查看函数地址，在装饰前后，f1()函数地址不同。
    print(content)


f1("content")


def decorator(func):
    print("decorator-begin")

    def wrapper(*args):
        print("validate")
        return func(*args)  # 这里要加*，这样就会将 arg 元组拆包 。

    print("decorator-end")
    return wrapper


@decorator
def f1(content, a):  # 可以断点加载这一行，查看函数地址，在装饰前后，f1()函数地址不同。
    print(content, a)


f1("content", 1000)


def decorator(func):
    print("decorator-begin")

    def wrapper(*args, **kwargs):  # 万能装饰器
        print("validate")
        return func(*args, **kwargs)  # 这里要加*，这样就会将 arg 元组拆包 。

    print("decorator-end")
    return wrapper


@decorator
def f1(content, a, b=40):  # 可以断点加载这一行，查看函数地址，在装饰前后，f1()函数地址不同。f1最开始的地址传递给了装饰器。而 f1 最新的地址是 wrapper 函数地址。
    print(content, a, b)


f1(content="content", b=1000, a=50)

def decorator_1(arg):
    print("decorator_1-begin")
    def decorator(func):
        print("decorator-begin")

        def wrapper(*args, **kwargs):  # 万能装饰器
            print("validate")
            print(arg)
            return func(*args, **kwargs)  # 这里要加*，这样就会将 arg 元组拆包 。

        print("decorator-end")
        return wrapper
    print("decorator_1-end")
    return decorator

@decorator_1(11)
def f1(content, a, b=40):  # 可以断点加载这一行，查看函数地址，在装饰前后，f1()函数地址不同。f1最开始的地址传递给了装饰器。而 f1 最新的地址是 wrapper 函数地址。
    print(content, a, b)


f1(content="content", b=1000, a=50)


